package core;

import java.util.ArrayList;
import java.util.LinkedList;

public abstract class AbstractAgent {

	Perception perception;
	public int x;
	public int y;
	public int renata_time;
	public boolean goalReached = false;
	Action.Type currAction;
	public ArrayList<Action> actionList;
	public int max_steps_per_goal;
	LinkedList<Square.Type> goals;
	LinkedList<String> actions;
	public Square.Type subgoal;
	public boolean something_has_changed;

	public AbstractAgent(int x, int y, int opBound) {
		this.x = x;
		this.y = y;
		this.renata_time = opBound;
		currAction = Action.Type.NOOP;
		actionList = new ArrayList<Action>();
		this.max_steps_per_goal = -1;
	}

	public abstract boolean goalReached();

	public abstract void perceives(Perception perception);

	public abstract void update();

	public abstract void showActions();

	public abstract Action.Type action();
}